package com.wnxy;

import java.io.IOException;
import java.io.InputStream;

/**
 * 自定义类加载器
 */
public class App1 {
    public static void main(String[] args) throws Exception {
        ClassLoader myLoader = new ClassLoader() {
            @Override
            public Class<?> loadClass(String name) throws ClassNotFoundException {
                try {
                    // 获取类的class名称: ClassLoaderTest.class
                    String fileName = name.substring(name.lastIndexOf(".") + 1) +
                            ".class";
                    // 获取ClassLoaderTest.class文件对应的输入流
                    InputStream in = getClass().getResourceAsStream(fileName);
                    // 如果不是空
                    if(in == null){
                        return super.loadClass(name);
                    }
                    // 定义该class文件对应的字节数组大小
                    byte[] b = new byte[in.available()];
                    // 读入字节数组中
                    in.read(b);
                    // 定义class对象
                    return defineClass(name, b, 0, b.length);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return super.loadClass(name);
            }
        };
        // 使用自定义类加载器加载出来的Class对象
        Class c1 = myLoader.loadClass("com.wnxy.App1");
        // 使用系统默认的类加载器加载出来的Class对象
        Class c2 = App1.class;
        // 结果为false
        System.out.println(c1 == c2);
    }
}
